// 封装的axios的函数？？
// import axios from 'axios'
// 功能一： 引入axios库：（直接的安装包）
import axios from 'axios'
import { Toast } from 'vant'
import router from '../router'
// 封装一个基准路径：
// 方便请求，无需每次输入完整的路径：
axios.defaults.baseURL = 'http://157.122.54.189:9083'
// 修改基础路径
// axios.defaults.baseURL = "http://liangwei.tech:3000"

// 11月23日： 写一个请求拦截器：不管哪个页面，只要调用axios，就会被拦截到：
axios.interceptors.request.use(config => {
    // 请求拦截器：可以接收到请求配置，作为形参：
    // 1、如果这个请求的headers请求头没有带authorization。token： （登陆过）
    // 2、我有token，证明我已经登陆过
    if (!config.headers.Authorization && localStorage.getItem('token')) {
        // 可以在config里面添加token：
        config.headers.Authorization = localStorage.getItem('token');
        console.log('config？？？？请求拦截到了什么？？')

    }

    return config
})


// 统一创建一个‘响应拦截器’：（统一处理一个请求错误的信息）无论哪个页面发送请求，响应都应该来到这里，
// 先做判断，再返回给页面，再进行页面的逻辑处理
// 这个响应拦截器接收回调函数作为参数，所有的响应都会被这个回调函数接收到进行处理
axios.interceptors.response.use((res) => {
    // interceptors
    // 拦截器可以拦截到结果：res
    console.log('路过拦截器，并放行')
    // 如果浏览器报401之类的状态码，就需要弹出弹框：
    const errCodePattern = /^4\d{2}/
    if (errCodePattern.test(res.data.statusCode)) {
        // 弹出弹框：
        // 为防止后端没有相应的错误数据表示，可写死一个防御性编程：
        Toast.fail(res.data.message || '系统错误，请稍后重试')
    }

    // 另一种独有的逻辑错误：
    // 当'用户信息验证失败' 时： 不仅需要进行toast弹框，还需要将本地存储中的token值清掉、并且跳转到登录页：
    if (res.data.message === "用户信息验证失败") {
        localStorage.removeItem('token');
        localStorage.removeItem('userId');
        router.replace('/login');
    }




    // 它必须要记得放行！！
    // return res
    return res
})

// 添加一个新的基准路径：非默认基准路径：
// 创建一个新的axions实例？？create？？实例？？

// axios.create()???  这是什么？？ axios自己独有的添加属性的方法？？
export const axiosTB = axios.create({
    // baseURL='http://api.taobao.com'  不能用等于号呀！！！
    baseURL: 'http://api.taobao.com'
})



// 一定一定要导出！！！
export default axios;
